Placement of resource-consuming clients, such as virtual machines (VMs), on host devices in a distributed computer system is an important factor in efficiently utilizing physical resources in the distributed computer system. An effective client placement strategy must satisfy the constraints of the clients and optimize several, sometimes conflicting, goals, while taking into consideration the complexities of the distributed computer system.
As an example, a constraint may be to reduce VM to VM communication overhead by placing VMs together on a cluster (affinity). Another constraint may be to increase resource availability by separating two VMs onto different clusters (anti-affinity). These constraints can make it difficult to come up with a placement solution that matches the VMs requirements while balancing utilization of the distributed computer system.